#include <stdio.h>
#include <unistd.h>
#include <string.h>


int main()
{
    // 提前为pipe函数创建输出型参数
    int fd[2];
    // 创建管道
    int ret = pipe(fd);
    if(ret < 0)  //管道创建失败
    {
        perror("pipe");
        return 0;
    }

    // 管道创建成功
    // 创建子进程
    pid_t pid = fork();
    if(pid < 0)  // 子进程创建失败
    {
        perror("fork");
        return 0;
    }
    else if(pid == 0)
    {
        // 子进程 读
        // 关闭子进程的写文件描述符
        close(fd[1]);
        // 打印子进程的读写文件描述符
        printf("child,fd[0]:%d\n",fd[0]);
        printf("child,fd[1]:%d\n",fd[1]);

        // 子进程读取管道内容
        char buf1[1000] = {0};
        read(fd[0],buf1,sizeof(buf1)-1);
        // 打印管道内容
        printf("child read pipe:%s\n",buf1);
    }
    else
    {
        // 父进程 写
        // 关闭父进程的读文件描述符
        close(fd[0]);
        // 打印父进程的读写文件描述符
        printf("father,fd[0]:%d\n",fd[0]);
        printf("father,fd[1]:%d\n",fd[1]);

        // 父进程向管道输入内容
        char buf[] = "i am father";
        write(fd[1],buf,strlen(buf));
    }
    while(1)
    {
        sleep(1);
    }

    return 0;
}
